package com.google.android.apps.skipbot;

public interface IKSequenceProvider {
  /**
   * Gets the number of frames in each stride. Cycling throw a full set of
   * frames will return the robots legs to the same position at the start of the
   * frames.
   */
  public int getNumberOfFrames();

  /**
   * Gets the number of cycles (one full sequence through each frame) to run. -1
   * will run the sequence continuously until canceled.
   */
  public int getNumberOfCycles();

  /**
   * The pause in milliseconds between each frame.
   */
  public int getFramePause();

  /**
   * A two dimensional array that gives the relative XY position of the end of
   * the leg for each position in the stride. The first dimension is the stride
   * position index and should be getNumberOfFrames in length. The second
   * dimension is the relative xy position in inches. (i.e.
   * getStringPosition()[8][1] is the relative y position of the 9th stride
   * position) Note that +X is aligned with the forward direction vector in the
   * global XY plane and +Y is aligned with global +Z.
   */
  public double[][] getStridePosition();

  /**
   * Gets an array that is the starting stride position index for each leg. This
   * value is used to calculate the initial position of each leg as well as what
   * position the leg will move to in the next frame.
   */
  public int[] getInitialLegStridePosition();

  /**
   * Gets a two dimensional array that gives the absolute base position for each
   * leg. The absolute position of each leg in a given frame is the leg base
   * position + the leg's current stride position. The first dimension is the
   * leg index and the second is a length 3 array of global XYZ values in
   * inches.
   */
  public double[][] getLegBasePosition();

}
